/*
 * ParametroObjetoConstructor.java
 * Copyright 2010 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 30/11/2010, 11:15:16 AM
 */
package com.ufps.cuatro.modelo.representacion;

import com.ufps.cuatro.util.base.ObjectBase;

/**
 * <i><b>ParametroObjetoConstructor:</b></i>Esta Clase es la base para la creación de los
 * parametros de los constructores de los controles swing.
 *
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 30/11/2010
 * @see ObjectBase
 */
public class ParametroObjetoConstructor extends ObjectBase{
    private static final long serialVersionUID = -5481567873767352845L;
    
    private String classpath;
    private String value;
    private boolean primitive;
    private boolean array;
    private Object objValue;
    private ObjetoConstructor objConstructor;    

    /**
     * Constructor por Defecto.
     */
    public ParametroObjetoConstructor() {
    }    

    /**
     * Indica si el Parametro es un Array.
     * @return estado de Parametro que indica si es un array.
     */
    public boolean isArray() {
        return array;
    }

    /**
     * Devuelve el classpath o cadena de definición del Tipo de dato.
     * @return El Classpath
     */
    public String getClasspath() {
        return classpath;
    }   

    /**
     * Devuelve el Objeto Constructor al cual pertenece el Parametro.
     * @return Objeto Constructor.
     */
    public ObjetoConstructor getObjConstructor() {
        return objConstructor;
    }

    /**
     * Indica si el Parametro es un tipo de dato Primitivo.
     * @return estado la Parametro que indica si es un tipo de dato Primitivo.
     */
    public boolean isPrimitive() {
        return primitive;
    }   

    /**
     * Devuelve el Valor del Parametro, este campo se incializa por defecto si el
     * Parametro lo requiere.
     * @return Valor por defecto del Parametro.
     */
    public String getValue() {
        return value;
    }

    /**
     * Establece el estado del parametro que determina si es un array.
     * @param array @DefinicionParametro
     */
    public void setArray(boolean array) {
        this.array = array;
    }

    /**
     * Asigna el Classpath o cadena de definición del tipo de dato que representa.
     * @param classpath @DefinicionParametro
     */
    public void setClasspath(String classpath) {
        this.classpath = classpath;
    }    

    /**
     * Establece el Constructor al cual pertenece el Parametro.
     * @param objConstructor @DefinicionParametro
     */
    public void setObjConstructor(ObjetoConstructor objConstructor) {
        this.objConstructor = objConstructor;
    }

    /**
     * Establece el estado del parametro que determina si es un tipo de dato Primitivo.
     * @param primitive @DefinicionParametro
     */
    public void setPrimitive(boolean primitive) {
        this.primitive = primitive;
    }

    /**
     * Asigna un valor al Parametro.
     * @param value @DefinicionParametro
     */
    public void setValue(String value) {
        this.value = value;
    }

    /**
     * Devuelve el Valor al Parametro.
     * @return Valor del Parametro.
     */
    public Object getObjValue() {
        return objValue;
    }

    /**
     * Asigan un Valor al Parametro.
     * @param objValue @DefinicionParametro
     */
    public void setObjValue(Object objValue) {
        this.objValue = objValue;
    }

    @Override
    public String toString() {
        return "ParametroObjetoConstructor{" + "id=" + id + "classpath=" + classpath + "value=" + value + "primitive=" + primitive + "array=" + array + '}';
    }

    @Override
    public int compareTo(Object o) {
       try{
            ParametroObjetoConstructor obj = (ParametroObjetoConstructor) o;
            if(this.id > obj.id)
                return 1;
            else if(this.id < obj.id)
                return -1;
            else
                return 0;
        }catch(java.lang.NullPointerException ex){}
       return 0;
    }

//    @Override
//    protected Object clone() {
//        ParametroObjetoConstructor objClon = null;        
//        try {
//            //Primero se Clona la Referencia Local
//            objClon = (ParametroObjetoConstructor) super.clone();
//        } catch (CloneNotSupportedException ex) {
//            Logger.getLogger(ParametroObjetoConstructor.class.getName()).log(Level.SEVERE, null, ex);
//        }
//        //Ahora se hace la Clonación Profunda
//        if(classpath != null){
//            ((ParametroObjetoConstructor)objClon).setClasspath(new String(classpath.toCharArray()));
//        }
//        if(objConstructor != null){
//            ((ParametroObjetoConstructor)objClon).setObjConstructor((ObjetoConstructor) objConstructor.clone());
//        }
//        if(objValue != null){
//            ((ParametroObjetoConstructor)objClon).setObjValue(objValue);
//        }
//        if(value != null){
//            ((ParametroObjetoConstructor)objClon).setValue(new String(value.toCharArray()));
//        }        
//        return objClon;
//    }
    
    

}
